/**
 * @(#)ContratoK.java Jan 24, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : Psique
 * <br/>Creaci&oacute;n: Jan 24, 2007 - 11:47:11 AM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Jan 24, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Psique</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */

package com.psiqueware.jazmin.empresas.recursos.humanos.modelo;

import com.psiqueware.alheli.basico.BaseObject;
import com.psiqueware.manzanilla.informacion.documentos.Documento;
import com.psiqueware.jazmin.empresas.recursos.humanos.Contrato;
import com.psiqueware.jazmin.empresas.recursos.humanos.Sueldo;
import com.psiqueware.jazmin.empresas.recursos.humanos.TipoContrato;
import com.psiqueware.jazmin.empresas.recursos.humanos.TipoEmpleo;

import java.util.Date;

/**
 * Acuerdo entre un {@link Empleado} y una Empresa
 * para la venta de los servicios del {@link Empleado} de una
 * manera remunerada.
 * <br/>Paquete Original: com.psiqueware.tulipan.empresas.modelo
 * <br/>Nombre  Original: ContratoK
 * <br/>Oprima para ver : <a href="ContratoK.java.html"><i>C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Psique</a>
 * @version Revision: 1.1 Jan 24, 2007 11:47:11 AM
 * @noinspection ClassWithoutLogger
 */
public class ContratoK extends BaseObject implements Contrato
{

    /** {@link Sueldo} que va a percibir este {@link Empleado}. */
    private Sueldo m_sueldo;

    /** Fecha de ingreso al trabajo. */
    private Date m_fechaIngreso;

    /** Fecha de baja del trabajo. */
    private Date m_fechaBaja;

    /** Tipo de contrato para el {@link Empleado}. */
    private TipoContrato m_tipoContrato;

    /** Tipo para este {@link Empleado}. */
    private TipoEmpleo m_tipoEmpleo;

    /** Clave de esta {@link Contrato}. Este campo lo llena el usuario y es informativo. */
    private String m_clave;

    /** Descripcion de este {@link Contrato}. Este campo lo llena el usuario y es informativo. */
    private Documento m_descripcion;

    /** Constructor de ContratoK. */
    public ContratoK ()
    {
    }

    /**
     * Construye un {@link Contrato} a partir de sus partes componentes.
     *
     * @param fechaIngreso Fecha de ingreso al trabajo.
     * @param fechaBaja    Fecha de baja del trabajo.
     * @param tipoContrato Tipo de contrato para el {@link Empleado}.
     * @param tipoEmpleo   Tipo para este {@link Empleado}.
     */
    public ContratoK ( final Date fechaIngreso, final Date fechaBaja, final TipoContrato tipoContrato, final TipoEmpleo tipoEmpleo )
    {
        setFechaIngreso ( fechaIngreso );
        setFechaBaja ( fechaBaja );
        setTipoContrato ( tipoContrato );
        setTipoEmpleo ( tipoEmpleo );
    }


    /**
     * Devuelve el Fecha de ingreso al trabajo.
     *
     * @return valor de 'fechaIngreso'.
     *
     * @see Date
     */
    public Date getFechaIngreso ()
    {
        Date salida = null;
        if ( null != m_fechaIngreso )
        {
            salida = new Date ( m_fechaIngreso.getTime () );
        }
        return salida;
    }

    /**
     * Establece el Fecha de ingreso al trabajo.
     *
     * @param fechaIngreso nuevo valor para 'fechaIngreso'.
     *
     * @see Date
     */
    public void setFechaIngreso ( final Date fechaIngreso )
    {
        Date salida = null;
        if ( null != fechaIngreso )
        {
            salida = new Date ( fechaIngreso.getTime () );
        }
        this.m_fechaIngreso = salida;
    }


    /**
     * Devuelve el Fecha de baja del trabajo.
     *
     * @return valor de 'fechaBaja'.
     *
     * @see Date
     */
    public Date getFechaBaja ()
    {
        Date salida = null;
        if ( null != m_fechaBaja )
        {
            salida = new Date ( m_fechaBaja.getTime () );
        }
        return salida;
    }

    /**
     * Establece el Fecha de baja del trabajo.
     *
     * @param fechaBaja nuevo valor para 'fechaBaja'.
     *
     * @see Date
     */
    public void setFechaBaja ( final Date fechaBaja )
    {
        Date salida = null;
        if ( null != fechaBaja )
        {
            salida = new Date ( fechaBaja.getTime () );
        }
        this.m_fechaBaja = salida;
    }

    /**
     * Devuelve el Tipo de contrato para el {@link Empleado}.
     *
     * @return valor de 'tipoContrato'.
     *
     * @see TipoContrato
     */
    public TipoContrato getTipoContrato ()
    {
        return m_tipoContrato;
    }

    /**
     * Establece el Tipo de contrato para el {@link Empleado}.
     *
     * @param tipoContrato nuevo valor para 'tipoContrato'.
     *
     * @see com.psiqueware.jazmin.empresas.recursos.humanos.TipoContrato
     */
    public void setTipoContrato ( final TipoContrato tipoContrato )
    {
        m_tipoContrato = tipoContrato;
    }

    /**
     * Devuelve el Tipo para este {@link Empleado}.
     *
     * @return valor de 'tipoEmpleo'.
     *
     * @see TipoEmpleo
     */
    public TipoEmpleo getTipoEmpleo ()
    {
        return m_tipoEmpleo;
    }

    /**
     * Establece el Tipo para este {@link Empleado}.
     *
     * @param tipoEmpleo nuevo valor para 'tipoEmpleo'.
     *
     * @see TipoEmpleo
     */
    public void setTipoEmpleo ( final TipoEmpleo tipoEmpleo )
    {
        m_tipoEmpleo = tipoEmpleo;
    }

    /**
     * Devuelve el {@link Sueldo} que va a percibir este {@link Empleado}.
     *
     * @return valor de 'sueldo'.
     *
     * @see Sueldo
     */
    public Sueldo getSueldo ()
    {
        return m_sueldo;
    }

    /**
     * Establece el {@link Sueldo} que va a percibir este {@link Empleado}.
     *
     * @param sueldo nuevo valor para 'sueldo'.
     *
     * @see Sueldo
     */
    public void setSueldo ( final Sueldo sueldo )
    {
        m_sueldo = sueldo;
    }


    /**
     * Devuelve el Clave de esta {@link Contrato}. Este campo lo llena el usuario y es informativo.
     *
     * @return valor de 'clave'.
     *
     * @see String
     */
    public String getClave ()
    {
        return m_clave;
    }

    /**
     * Establece el Clave de esta {@link Contrato}. Este campo lo llena el usuario y es informativo.
     *
     * @param clave nuevo valor para 'clave'.
     *
     * @see String
     */
    public void setClave ( final String clave )
    {
        m_clave = clave;
    }

    /**
     * Devuelve el Descripcion de este {@link Contrato}. Este campo lo llena el usuario y es informativo.
     *
     * @return valor de 'descripcion'.
     *
     * @see Documento
     */
    public Documento getDescripcion ()
    {
        return m_descripcion;
    }

    /**
     * Establece el Descripcion de este {@link Contrato}. Este campo lo llena el usuario y es informativo.
     *
     * @param descripcion nuevo valor para 'descripcion'.
     *
     * @see Documento
     */
    public void setDescripcion ( final Documento descripcion )
    {
        m_descripcion = descripcion;
    }

    /**
     * Convierte este {@link Contrato} a su representación textual.
     *
     * @noinspection DuplicateStringLiteralInspection,HardCodedStringLiteral,HardcodedLineSeparator
     */
    public String toString ()
    {
        StringBuilder sb = new StringBuilder ();
        sb.append ( "<Instance Class = '" ).append ( this.getClass ().getCanonicalName () ).append ( "'>" );
        sb.append ( "<sueldo>" ).append ( m_sueldo ).append ( "</sueldo> " );
        sb.append ( "<fechaIngreso>" ).append ( m_fechaIngreso ).append ( "</fechaIngreso> " );
        sb.append ( "<fechaBaja>" ).append ( m_fechaBaja ).append ( "</fechaBaja> " );
        sb.append ( "<tipoContrato>" ).append ( m_tipoContrato ).append ( "</tipoContrato> " );
        sb.append ( "<tipoEmpleo>" ).append ( m_tipoEmpleo ).append ( "</tipoEmpleo> " );
        sb.append ( "<clave>" ).append ( m_clave ).append ( "</clave> " );
        sb.append ( "<descripcion>" ).append ( m_descripcion ).append ( "</descripcion> " );
        sb.append ( "</Instance>" );
        return sb.toString ();
    }
}

